package Day013_线程安全.demo04_定时器;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

/**
 * @author zhangyan
 * @date 2020/5/4 14:02
 */
/*
    定时器，可以设置线程在某个时间执行某件事情，或者某个时间开始，每间隔指定的时间反复的做某件事情
    java.util.Timer类：线程调度任务以供将来在后台线程中执行的功能。 任务可以安排一次执行，或者定期重复执行

    构造方法:
            public Timer()：构造一个定时器

    成员方法:
             void schedule(TimerTask task, long delay) 在指定的延迟之后,执行指定任务

             void schedule(TimerTask task, long delay, long period) 在指定的延迟之后开始，每隔指定毫秒重新执行指定任务

             void schedule(TimerTask task, Date time) 在指定的时间安排指定的任务执行

             void schedule(TimerTask task, Date firstTime,long period) 从指定的时间开始，每隔指定毫秒重新执行指定任务

             取消定时器: timer.cancel()

             TimerTask是抽象类,不能创建对象,可以传子类对象或匿名内部类
 */

public class Test {
    public static void main(String[] args) throws ParseException {

        //创建定时器对象
        Timer timer = new Timer();

        //设置定时器
        //1. void schedule(TimerTask task, long delay)
    //    timer.schedule(new TimerTask() {
    //        @Override
    //        public void run() {
    //            System.out.println("起床了...");
    //            //取消定时器
    //            //timer.cancel();
    //        }
    //    },3000);

        //2. void schedule(TimerTask task, long delay, long period)
    //    timer.schedule(new TimerTask() {
    //        @Override
    //        public void run() {
    //            System.out.println("起床了...");
    //        }
    //    },3000,1000);

        //3. void schedule(TimerTask task, Date time)
        String str = "2020-05-04 14:22:00";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = sdf.parse(str);

    //    timer.schedule(new TimerTask() {
    //        @Override
    //        public void run() {
    //            System.out.println("起床了...");
    //            timer.cancel();
    //        }
    //    },date);

        //4. void schedule(TimerTask task, Date firstTime,long period)
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("起床了...");
            }
        },date,1000);
    }
}
